A common software architecture in use today is one based on software services, where software components communicate with each other over a network and each component exposes a set of service calls to be invoked by other components. In testing a software system that is built on software services, it is sometimes useful to instrument the software components to record the particular set of service calls that is invoked as a result of executing under a particular set of test stimuli. Such instrumentation code may be added to either the caller or the callee. However, instrumentation code must be maintained, and updated when new service calls are added. Furthermore, changing the source code on the callee is not always possible when that code is owned or maintained by a third party. Finally, recording all the service calls results in a large amount of data which must then be reviewed to discover useful information.